package com.xuxu.subscribe;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuxu.util.RabbitConnectionUtil;

/**
 * 发布者/订阅者模式 Publish/Subscribe
 *
 * 发布者/订阅者模式的交换机类型是 fanout
 */
public class Producer {
    //定义交换者名称
    static final String FANOUT_EXCHANGE = "fanout_exchange";
    //定义队列一名称
    static final String FANOUT_QUEUE_1 = "fanout_queue_1";
    //定义队列二名称
    static final String FANOUT_QUEUE_2 = "fanout_queue_2";

    public static void main(String[] args) throws Exception {
        //获取RabbitMQ连接对象
        Connection connection = RabbitConnectionUtil.getConnection();

        //创建频道对象
        Channel channel = connection.createChannel();

        //声明交换机
        /*
            参数一：交换机名称
            参数二：交换机类型是 fanout
         */
        channel.exchangeDeclare(FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);

        //声明队列
        /*
            参数一：队列名称
            参数二：是否实例化永久保存
            参数三：是否独占本次连接
            参数四：不使用的时候是否自动删除
            参数五：队列的其他参数
         */
        channel.queueDeclare(FANOUT_QUEUE_1, true, false, false, null);
        channel.queueDeclare(FANOUT_QUEUE_2, true, false, false, null);

        //交换机绑定队列
        /*
            参数一：队列名称
            参数二：交换机名称
            参数三：路由key
         */
        channel.queueBind(FANOUT_QUEUE_1, FANOUT_EXCHANGE, "");
        channel.queueBind(FANOUT_QUEUE_2, FANOUT_EXCHANGE, "");
        //发送消息
        for (int i = 1; i <= 10; i++) {
            String message = "🐶🐶🐶🐶🐶🐶 第 " + i + "条消息";
            //执行发送
            /*
                参数一：交换机名称
                参数二：队列名称
                参数三：其他消息属性
                参数四：发送的消息内容
             */
            channel.basicPublish(FANOUT_EXCHANGE, "", null, message.getBytes());

            System.out.println("已发送：" + message);
        }
        //关闭频道
        channel.close();
        //关闭连接
        connection.close();
    }
}
